package com.shijf.ds;

import java.util.BitSet;
import java.util.Map;

/**
 * @Author shijf
 * @Description // 阿里面试题-编码实现1亿个数据找不存在的随机数
 *                 bitset
 * @Date 15:21 2023/10/30
 **/
public class BitSet_RANDOM {
    public static void main(String[] args) {
//        BitSet bitSet = new BitSet(128);
//        bitSet.set(0);
//        bitSet.set(129);
//        System.out.println(bitSet.size()); //位图的总格子数
//        System.out.println(bitSet.length()); //位图最高的数据为1的格子编号+1  bitset的逻辑大小
//        System.out.println(bitSet.cardinality());//返回所有格子值为1 的统计
        RandomFind();
    }

    public static void RandomFind(){
        int range = 100000; //随即数范围
        int totalNum = 10000;//产生随机数个数
        BitSet bitSet = new BitSet(range);

        //生成随机数
        for(int i=0;i<totalNum;i++){
            int v = (int)(Math.random() * range);
            bitSet.set(v);
        }

        System.out.println("bitmap是1的个数(存在重复随机送)："+bitSet.cardinality());
        System.out.println("bitmap是length(bitmap里面占据的位数是1的位数+1)："+bitSet.length());
        for (int i = 0; i < range; i++) {
            if (!bitSet.get(i)) {
                System.out.print(i+",");
            }
        }
        System.out.println("我是分割线------------------------------");
        for (int i = 0; i < range; i++) {
            if (bitSet.get(i)) {
                System.out.print(i+",");
            }
        }
    }
}
